package runze.util.io;

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.imageio.ImageIO;

import com.sun.image.codec.jpeg.ImageFormatException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

/**
 * 图片压缩
 * @author wrzhxy@qq.com
 * @创建时间 2017年6月7日 上午9:29:27
 */
public class ImgCompress {
	/**
	 * 
	 * @param file		待压缩文件
	 * /@param filename	生成的文件名
	 * @param w
	 * @param h
	 * @return
	 */
	public static String compressImgUpdate(File file, String path, String destFileName, int w, int h) {
		FileOutputStream out =  null;
		
		try {
			Image img = ImageIO.read(file);      // 构造Image对象 
			
//		int width = img.getWidth(null);    // 得到源图宽  
//        int height = img.getHeight(null);  // 得到源图长  
			
			// SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的 优先级比速度高 生成的图片质量比较好 但速度慢  
			BufferedImage image = new BufferedImage(w, h,BufferedImage.TYPE_INT_RGB );
			image.getGraphics().drawImage(img, 0, 0, w, h, null); // 绘制缩小后的图  
			File destFile = new File(path + "/" + destFileName);  
			out = new FileOutputStream(destFile); 		// 输出到文件流  
			// 可以正常实现bmp、png、gif转jpg
			JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);  
			encoder.encode(image); // JPEG编码  
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (ImageFormatException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (out != null) {
				try {
					out.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return destFileName;
	}
	/**
	 *  用文件名的后缀直接生成随机文件名压缩图片
	 * @param file	待压缩文件
	 * @param filename	待压缩文件名
	 * @param path	传送路径
	 * @param w		压缩后的宽
	 * @param h		长
	 * @return	压缩后的文件名
	 */
	public static String compressImg(File file, String filename, String path, int w, int h) {
		FileOutputStream out =  null;
		
		filename = "th_" + filename;
		
		try {
			Image img = ImageIO.read(file);      // 构造Image对象 
			
//		int width = img.getWidth(null);    // 得到源图宽  
//        int height = img.getHeight(null);  // 得到源图长  
			
			// SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的 优先级比速度高 生成的图片质量比较好 但速度慢  
			BufferedImage image = new BufferedImage(w, h,BufferedImage.TYPE_INT_RGB );
			image.getGraphics().drawImage(img, 0, 0, w, h, null); // 绘制缩小后的图  
			File destFile = new File(path, filename);  
			out = new FileOutputStream(destFile); 		// 输出到文件流  
			// 可以正常实现bmp、png、gif转jpg  
			JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);  
			encoder.encode(image); // JPEG编码  
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ImageFormatException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if (out != null) {
				try {
					out.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		return filename;
	}
}
